flowchart BT
  RequiredToBeUniform ==> textureSamplecall;
  CFreturn -.-> CFstart;
  posidentexpr ==> MayBeNonUniform;
  binaryexprresult ==> posidentexpr;
  binaryexprresult -.-> CFstart;
  ifstmt ==> binaryexprresult;
  tidentexpr -.-> ifstmt;
  textureSamplearg0 -.-> tidentexpr;
  sidentexpr -.-> ifstmt;
  textureSamplearg1 -.-> sidentexpr;
  posidentexpr1 -.-> MayBeNonUniform;
  textureSamplearg2 -.-> posidentexpr1;
  textureSamplecall ==> ifstmt;
  textureSamplereturnvalue -.-> MayBeNonUniform;
  textureSamplereturnvalue -.-> CFaftertextureSample;
  textureSamplereturnvalue -.-> textureSamplearg0;
  textureSamplereturnvalue -.-> textureSamplearg1;
  textureSamplereturnvalue -.-> textureSamplearg2;
  CFaftertextureSample -.-> textureSamplecall;

  style MayBeNonUniform fill:#941b1b
  style RequiredToBeUniform fill:#1818ab
  linkStyle 0,2,3,5,12 stroke:#941b1b

  textureSamplecall([call: textureSample])
  CFreturn([CF_return])
  CFstart([CF_start])
  posidentexpr[formal_param_expr: pos]
  binaryexprresult[binary_expr: pos.x < 0.5]
  ifstmt([if_stmt])
  tidentexpr[var_ident_expr: t]
  textureSamplearg0[textureSample arg_0]
  sidentexpr[var_ident_expr: s]
  textureSamplearg1[textureSample arg_1]
  posidentexpr1[formal_param_expr: pos]
  textureSamplearg2[textureSample arg_2]
  textureSamplereturnvalue[textureSample return_value]
  CFaftertextureSample([CF_after_textureSample])
